package cn.bearspark.comment.provider.service;

import cn.bearspark.comment.dto.*;
import cn.bearspark.common.dto.Page;

import java.util.List;

/**
 * 评论服务的服务接口
 *
 * @author f
 */
public interface CommentService {

    /**
     * 增加/减少评论的点赞数
     *
     * @param commentId 被操作的评论 id
     * @param liked     点赞的枚举值
     */
    void like(long commentId, int liked);

    /**
     * 分页查询动态的楼评论
     *
     * @param pageNum     评论的页数
     * @param pageSize    评论的条数
     * @param happeningId 待查询评论的动态 id
     * @param order       评论排序的方式
     * @return 楼评论的信息
     */
    Page<BldgCommentDTO> pageQueryHappening(int pageNum, int pageSize, long happeningId, int order);

    /**
     * 分页查询层评论，按照时间顺序排列
     *
     * @param pageNum   评论的页数
     * @param pageSize  评论的条数
     * @param commentId 楼评论的 id
     * @return 层评论的信息
     */
    List<LayerCommentDTO> pageQueryLayer(int pageNum, int pageSize, long commentId);

    /**
     * 动态评论
     *
     * @param happeningReqDTO 动态评论的请求对象
     * @return 评论的 id
     */
    long commentHappening(HappeningReqDTO happeningReqDTO);

    /**
     * 回复评论
     *
     * @param replyReqDTO 回复评论的请求对象
     * @return 回复评论的返回对象，如果没有回复，则返回 null
     */
    ReplyRespDTO reply(ReplyReqDTO replyReqDTO);

    /**
     * 删除评论
     *
     * @param userId    执行删除操作的用户 id
     * @param commentId 待删除评论的 id
     * @return 删除评论的返回对象，如果没有删除，则返回 null
     */
    DeleteRespDTO delete(long userId, long commentId);
}
